package com.zhang.eightSorts;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * 冒泡排序
 * 直接两两比较
 *
 */
public class BubbleSort {

    BubbleSort(int[] a)
    {

        int js=0;
//        第一非种冒泡排序
                for(int i=0;i<a.length;i++)
        {
            for (int j=0;j<a.length;j++)
            {
                if (a[j]>a[i])
                {
                    js=a[j];
                    a[j]=a[i];
                    a[i]=js;
                }
                System.out.println("-----  第"+(j+1)+"次的数组："+ Arrays.toString(a));
            }
        System.out.println("第"+(i+1)+"次排序后的数组："+ Arrays.toString(a));
        }


    }

    public static void   youhuabubbleSort(int[] a) {
        int js=0;
        //第二种冒泡排序
        for(int i=0;i<a.length-1;i++)
        {
            for (int j=0;j<a.length-1-i;j++)
            {
                if (a[j]>a[j+1])
                {
                    js=a[j];
                    a[j]=a[j+1];
                    a[j+1]=js;
                }
                System.out.println("-----  第"+(j+1)+"次的数组："+ Arrays.toString(a));
            }
            System.out.println("第"+(i+1)+"次排序后的数组："+ Arrays.toString(a));
        }
    }


    /**
     * 冒泡优化
     * @param a
     */
  public static void   youhuabubbleSort1(int[] a)
    {

        int js=0;//临时变量
        boolean flag=false;  //是否进行过交换
        for(int i=0;i<a.length-1;i++)
        {
            for (int j=0;j<a.length-1-i;j++)
            {
//            如果后面的比前面的大
                if (a[j]>a[j+1])
                {
                    flag=true;
                    js=a[j];
                    a[j]=a[j+1];
                    a[j+1]=js;

                }
                System.out.println("-----  第"+(j+1)+"次的数组："+ Arrays.toString(a));
            }
            System.out.println("第"+(i+1)+"次排序后的数组："+ Arrays.toString(a));
           if (!flag)
           {
               //此次排序中没有进行交换
               break;
           }else {
               flag=false;
           }
        }


    }

    public static void main(String[] arg0)
    {
        int[] a=new int[]{1,4,5,2,6,3};
        System.out.println("原数据："+Arrays.toString(a));
//        System.out.println("第一种冒泡：");
//         new  BubbleSort(a);
         a=new int[]{1,4,5,2,6,3};
        System.out.println("--------------");
        System.out.println("第二种冒泡：");
         BubbleSort.youhuabubbleSort(a);
        a=new int[]{1,4,5,2,6,3};
        System.out.println("--------------");
        System.out.println("第三种冒泡：");

        BubbleSort.youhuabubbleSort1(a);


        int[] b=new int[]{1,2,3,4,5,6};
        System.out.println("原数据："+Arrays.toString(b));
//        System.out.println("第一种冒泡：");
//        new  BubbleSort(b);
        b=new int[]{1,2,3,4,5,6};
        System.out.println("--------------");
        System.out.println("第二种冒泡：");
        BubbleSort.youhuabubbleSort(b);
        b=new int[]{1,2,3,4,5,6};
        System.out.println("--------------");
        System.out.println("第三种冒泡：");

        BubbleSort.youhuabubbleSort1(b);

    }
}
